package com.sqlcheck.service;

import com.sqlcheck.common.enums.DatabaseType;
import com.sqlcheck.entity.CompatibilityRule;
import com.sqlcheck.entity.LLMPromptTemplate;

import java.util.List;
import java.util.Map;

/**
 * 提示词生成服务接口
 */
public interface PromptGeneratorService {

    /**
     * 根据上下文生成优化提示词
     * 
     * @param sourceDbType 源数据库类型
     * @param targetDbType 目标数据库类型
     * @param sql          SQL语句
     * @param rules        适用规则列表
     * @return 生成的提示词
     */
    String buildPrompt(DatabaseType sourceDbType, DatabaseType targetDbType,
            String sql, List<CompatibilityRule> rules);

    /**
     * 根据模板键获取提示词模板
     * 
     * @param templateKey 模板键
     * @return 提示词模板
     */
    LLMPromptTemplate getPromptTemplate(String templateKey);

    /**
     * 根据数据库类型获取最佳提示词模板
     * 
     * @param sourceDbType 源数据库类型
     * @param targetDbType 目标数据库类型
     * @return 提示词模板
     */
    LLMPromptTemplate getBestTemplate(DatabaseType sourceDbType, DatabaseType targetDbType);

    /**
     * 渲染提示词模板
     * 
     * @param template  模板内容
     * @param variables 变量映射
     * @return 渲染后的提示词
     */
    String renderTemplate(String template, Map<String, Object> variables);

    /**
     * 验证提示词模板格式
     * 
     * @param template 模板内容
     * @return 验证结果
     */
    boolean validateTemplate(String template);

    /**
     * 更新模板使用统计
     * 
     * @param templateId     模板ID
     * @param success        是否成功
     * @param processingTime 处理时间
     */
    void updateTemplateUsage(Long templateId, boolean success, Integer processingTime);
}